{
int new_bootversion = self->bootversion ? 0 : 1;
glnx_unref_object OstreeBootloader *bootloader = NULL;
- g_autoptr(GFile) new_loader_entries_dir = NULL;
+ g_autofree char* new_loader_entries_dir = NULL;
glnx_unref_object OstreeRepo *repo = NULL;
gboolean show_osname = FALSE;
if (!_ostree_sysroot_query_bootloader (self, &bootloader, cancellable, error))
goto out;
- new_loader_entries_dir = ot_gfile_resolve_path_printf (self->path, "boot/loader.%d/entries",
- new_bootversion);
- if (!glnx_shutil_rm_rf_at (AT_FDCWD, gs_file_get_path_cached (new_loader_entries_dir), cancellable, error))
+ new_loader_entries_dir = g_strdup_printf ("boot/loader.%d/entries", new_bootversion);
+ if (!glnx_shutil_rm_rf_at (self->sysroot_fd, new_loader_entries_dir, cancellable, error))
goto out;
- if (!ot_util_ensure_directory_and_fsync (new_loader_entries_dir, cancellable, error))
+ if (!glnx_shutil_mkdir_p_at (self->sysroot_fd, new_loader_entries_dir, 0755,
+ cancellable, error))
goto out;
/* Need the repo to try and extract the versions for deployments.
return TRUE;
}
-/**
- * ot_util_ensure_directory_and_fsync:
- * @dir: Path to a directory
- * @cancellable: Cancellable
- * @error: Error
- *
- * Create @dir (and all intermediate parent directories), ensuring
- * that all entries are on disk.
- */
-gboolean
-ot_util_ensure_directory_and_fsync (GFile *dir,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean ret = FALSE;
- glnx_fd_close int parentfd = -1;
- const char *basename = glnx_basename (gs_file_get_path_cached (dir));
- g_autoptr(GFile) parent = g_file_get_parent (dir);
-
- again:
- parentfd = open (gs_file_get_path_cached (parent),
- O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC);
- if (parentfd == -1)
- {
- if (errno == ENOENT)
- {
- if (!ot_util_ensure_directory_and_fsync (parent, cancellable, error))
- goto out;
- goto again;
- }
- else
- {
- int errsv = errno;
- g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
- "opendir: %s", g_strerror (errsv));
- goto out;
- }
- }
-
- if (mkdirat (parentfd, basename, 0777) == -1)
- {
- if (errno == EEXIST)
- {
- ;
- }
- else
- {
- int errsv = errno;
- g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
- "mkdirat: %s", g_strerror (errsv));
- goto out;
- }
- }
-
- if (fsync (parentfd) == -1)
- {
- int errsv = errno;
- g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
- "fsync: %s", g_strerror (errsv));
- goto out;
- }
-
- ret = TRUE;
- out:
- return ret;
-}
-
#if !GLIB_CHECK_VERSION(2, 44, 0)
gboolean
GCancellable *cancellable,
GError **error);
-gboolean ot_util_ensure_directory_and_fsync (GFile *dir,
- GCancellable *cancellable,
- GError **error);
-
#if !GLIB_CHECK_VERSION(2, 44, 0)
gboolean
ot_file_enumerator_iterate (GFileEnumerator *direnum,